package br.edu.delta.dao;

import java.util.Collection;

import javax.ejb.Stateless;

import org.hibernate.Criteria;
import org.hibernate.criterion.Projections;
import org.hibernate.criterion.Restrictions;

import br.edu.delta.enuns.EnumStatusEntidade;
import br.edu.delta.model.Livro;


/**
 * <p>
 * <b>Title:</b> LivroDAO
 * </p>
 * 
 * <p>
 * <b>Description:</b> LivroDAO
 * </p>	
 * 	
 * <p>	
 * <b>Company: </b> 
 * </p>	
 * 	
 * @author Denis
 * 
 * @version 1.0.0
 */
@Stateless
public class LivroDAO extends AppDAO<Livro> {

	/** Atributo serialVersionUID. */
	private static final long serialVersionUID = -1L;

	@SuppressWarnings("unchecked")
	public Collection<String> pesquisarLivrosPorNome(String nome) {

		Criteria criteria = novaCriteria();

		criteria.add(Restrictions.ilike("nome", "%" + nome + "%"));
		
		criteria.add(Restrictions.eq("statusEntidade", EnumStatusEntidade.ATIVO));
		
		criteria.setProjection(Projections.property("nome"));
		
		return criteria.list();
	}

	public Livro pesquisarLivroPorCodigo(Long codigo) {

		Criteria criteria = novaCriteria();

		criteria.add(Restrictions.eq("codigo", codigo));
		
		return (Livro) criteria.uniqueResult();
	}

	public Livro pesquisarLivroPorNome(String nome) {

		Criteria criteria = novaCriteria();

		criteria.add(Restrictions.ilike("nome", nome));
		
		criteria.setMaxResults(1);
		
		return (Livro) criteria.uniqueResult();
	}

	public boolean verificarCodigoLivroJaCadastrado(Long codigo) {
		
		Livro livro = null;

		Criteria criteria = novaCriteria();

		criteria.add(Restrictions.eq("codigo", codigo));
		
		livro = (Livro) criteria.uniqueResult();
		
		return livro != null;
	}
	
}
